package stack

import "fmt"

/*
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
有效字符串需满足：
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
*/

func IsValid(s string) bool {
	n := len(s)

	if n%2 == 1 {
		return false
	}

	paris := map[byte]byte{
		')': '(',
		'}': '{',
		']': '[',
	}

	stack := []byte{}

	for i := 0; i < n; i++ {
		if _, ok := paris[s[i]]; ok {
			if len(stack) == 0 || stack[len(stack)-1] != paris[s[i]] {
				return false
			}
			stack = stack[:len(stack)-1]

		} else {
			stack = append(stack, s[i])
		}
		fmt.Println(stack)
	}

	return len(stack) == 0

}
